Берем основную модель, возможно, вообще без мяса, только с гусеницами, но с кучей точек крепления. Также берем кучу моделей-аттачметов, представляющих собой эти самые пушки, корпуса и все прочее. При выборе характеристик модели через диалог или интерфейс соответственно создаем на основной модели эффекты-аттачменты, будет собрана техника. Такие штуки, как двигатель и прочие невидные извне элементы будут скорее входить в математическую модель юнита, но это также можно запилить. Название танка - сразу не скажу, есть ли триггер на смену, но на таблице рекордов можно отобразить что угодно.
2.Тоже можно.
Создаем погодный в определенной местности и делаем два триггера для контроля входа-выхода юнитов из нее. На искомых юнитов применяем нужные способности - и все готово.
Здесь чуть сложнее: нужно постоянно проверять тип местности под юнитом, но тоже можно. Проверка на ограждения тоже может бить сделана.
4.Это уже интереснее. Видел раньше подобное в играх. При каждой атаке юнита случайным образом наносим или не наносим доп. урон, эффект горения, кидаем спелл на цель в зависимости от теоретического места попадания атаки.
5.И это можно. Но нужно писать нестандартную систему Альянса. Но через триггеры и JASS все можно...
Продажа техники - лучше через способность, что бы кидать ее на понравившегося юнита, не стоит покупать кота в мешке. Стоимость должна зависеть от технического уровня юнита, его текущего состояния (мертвый танк попадет вам бесплатно, сами чините!), если он был модернизован дополнительно, то это тоже входит в стоимость. Разрешение на продажу делаем аналогично.
Это легко через Custom Value и переменние.
Как ты понял, все что ты предложил создать можно, но на это нужно потрать хороший кусок времени. Остается пожелать тебе удачи над созданием проекта - мне идея уже нравится.
кхе, всё вроде можно, но объяснять долго, третье простое, просто при юзании способности в триггерах добавь условие сравнения, если юнит цель применяемой способности нежить, тогда действие о дополнительном уроне, например если способность наносит 100, то 20% это 20,в действии приказать применяющий юнит нанести урон юнит цель применяемой способности 100+(0.20х100), перед этим 100 можно установить, как переменную, например если с каждым уровнем урон растёт на 100, то переменная int=100хУровень способности способность у применяющий юнит.
Сложно объяснил?
В помощь тебе библиотеки(library) и базы данных.
Либы — для обращения по виду library_name.functionName(arguments)
Базы данных — для выделения юниту своих переменных.
С БД может быть момент не совсем понятным, поэтому скидываю пример:
Эта порнография разработана для личного пользования
У меня в коде есть иллюзия использования вжасса. Либа просто для доп табуляции и невостребованых манипуляций на случай импорта. При создании юнита ему присваивается ряд переменных, а номер этих переменных, относящихся к этому юниту, записывается в его(юнита) UnitUserData
library UnitDataBase
globals
constant integer UnitDBSize = 512
constant integer UnitDBHeroesStart = 0
constant integer UnitDBHeroesUnder = 49
constant integer UnitDBUnitsStart = 50//Includes illusions of heroes. Or Should include them at least :P
constant integer UnitDBUnitsUnder = 319
constant integer UnitDBSummonsStart = 320
constant integer UnitDBSummonsUnder = 511
integer UnitDBNextHero = 0
integer UnitDBNextUnit = 50
integer UnitDBNextSummon = 320
unit array UnitDBUnit[UnitDBSize]
real array UnitDBCurrentAnimationSpeed[UnitDBSize]
unit array UnitDBForceAttackTarget[UnitDBSize]
integer array UnitDBAffectedByStuns[UnitDBSize]
real array UnitDBMagicResistance[UnitDBSize]
real array UnitDBPhysResistance[UnitDBSize]
real array UnitDBCurrentArmor[UnitDBSize]//This armor does not include agility bonuses. Not used yet :>
real array UnitDBWhiteMovementSpeed[UnitDBSize]
real array UnitDBCurrentCustomSlow[UnitDBSize]
real array UnitDBMagicDamageAmplifier[UnitDBSize]
real array UnitDBPhysDamageAmplifier[UnitDBSize]
real array UnitDBAdditionalHealth[UnitDBSize]//AKA Shield. Healed whenever unit takes damage.
constant real GravityAcceleration = 14.//Azeroth, bitch!
real array UnitDBFlyingHeight[UnitDBSize]//Not used yet
real array UnitDBFallingSpeed[UnitDBSize]
integer array UnitDBItemUseVariable[UnitDBUnitsStart]//just don't ask
item array UnitDBLastUsedItem[UnitDBUnitsStart]
real array UnitDBCastPointX[UnitDBUnitsStart]
real array UnitDBCastPointY[UnitDBUnitsStart]
integer UnitDBPreviousHero//Used for exitwhen event. Its next minus two.
unit array UnitDBHeroHPBar[UnitDBUnitsStart]
unit array UnitDBHeroMPBar[UnitDBUnitsStart]
unit array UnitDBHeroSPBar[UnitDBUnitsStart]
endglobals
//Больно жирные для инлайна
function UnitDBFindNextFreeVariable takes integer i returns integer
local unit u
loop
set u = UnitDBUnit[i]
exitwhen u == null or GetUnitTypeId( u ) < 1
set i = i + 1
endloop
set u = null
return i
endfunction
function UnitDBAddHero takes unit u, real mdef, real armor returns nothing
local integer i = UnitDBNextHero
local real x = GetUnitX(u)
local real y = GetUnitY(u)
call UnitMakeAbilityPermanent( u, true, 'A00B' )
set UnitDBUnit[i] = u
call SetUnitUserData( u, i )
call GroupAddUnit( UnitsInPlayableArea, u )
set UnitDBItemUseVariable[i] = 0
set UnitDBCurrentAnimationSpeed[i] = 0.
set UnitDBAffectedByStuns[i] = 0
set UnitDBMagicResistance[i] = mdef
set UnitDBCurrentArmor[i] = armor
set UnitDBWhiteMovementSpeed[i] = GetUnitDefaultMoveSpeed( u )
set UnitDBCurrentCustomSlow[i] = 1.
set UnitDBMagicDamageAmplifier[i] = 1.
set UnitDBPhysDamageAmplifier[i] = 1.
set UnitDBFlyingHeight[i] = 0.//Doesn't include point height.
set UnitDBAdditionalHealth[i] = 0.
/*if ( i == UnitDBHeroesUnder ) then
call BJDebugMsg("|c00ff6060Hero limit reached! More heroes can be created, but things can go wild.")
endif*/
set UnitDBNextHero = i + 1
set UnitDBPreviousHero = i - 1
set UnitDBHeroHPBar[i] = CreateUnit(BossPlayer1, 'hmil', x, y, 0. )
call SetUnitAnimationByIndex( UnitDBHeroHPBar[i], 100 )
set UnitDBHeroMPBar[i] = CreateUnit( BossPlayer1, 'hrtt', x, y, 0. )
call SetUnitAnimationByIndex( UnitDBHeroMPBar[i], 100 )
set UnitDBHeroSPBar[i] = CreateUnit( BossPlayer1, 'hwt2', x, y, 0. )
call SetUnitAnimationByIndex( UnitDBHeroSPBar[i], 0 )
set u = null
return
endfunction
function UnitDBAddUnit takes unit createdUnit, real mdef, real armor returns nothing
local integer i = UnitDBNextUnit
local unit u = UnitDBUnit[i]
if ( u == null ) then
set i = UnitDBFindNextFreeVariable( UnitDBSummonsStart )
endif
set UnitDBUnit[i] = createdUnit
call SetUnitUserData( createdUnit, i )
call GroupAddUnit( UnitsInPlayableArea, createdUnit )
set UnitDBCurrentAnimationSpeed[i] = 0.
set UnitDBAffectedByStuns[i] = 0
set UnitDBMagicResistance[i] = mdef
set UnitDBCurrentArmor[i] = armor
set UnitDBWhiteMovementSpeed[i] = GetUnitDefaultMoveSpeed( createdUnit )
set UnitDBCurrentCustomSlow[i] = 1.
set UnitDBMagicDamageAmplifier[i] = 1.
set UnitDBPhysDamageAmplifier[i] = 1.
set UnitDBFlyingHeight[i] = 0.
set UnitDBAdditionalHealth[i] = 0.
if ( i < UnitDBSummonsUnder) then
set UnitDBNextSummon = i + 1
else
set UnitDBNextSummon = UnitDBSummonsStart
endif
set u = null
set createdUnit = null
return
endfunction
function UnitDBAddSummon takes unit summonedUnit, real mdef, real armor returns nothing
local integer i = UnitDBNextSummon
local unit u = UnitDBUnit[i]
if ( u == null ) then
set i = UnitDBFindNextFreeVariable( UnitDBSummonsStart )
endif
set UnitDBUnit[i] = summonedUnit
call SetUnitUserData( summonedUnit, i )
call GroupAddUnit( UnitsInPlayableArea, summonedUnit )
set UnitDBCurrentAnimationSpeed[i] = 0.
set UnitDBAffectedByStuns[i] = 0
set UnitDBMagicResistance[i] = mdef
set UnitDBCurrentArmor[i] = armor
set UnitDBWhiteMovementSpeed[i] = GetUnitDefaultMoveSpeed( summonedUnit )
set UnitDBCurrentCustomSlow[i] = 1.
set UnitDBMagicDamageAmplifier[i] = 1.
set UnitDBPhysDamageAmplifier[i] = 1.
set UnitDBFlyingHeight[i] = 0.
set UnitDBAdditionalHealth[i] = 0.
if ( i < UnitDBSummonsUnder) then
set UnitDBNextSummon = i + 1
else
set UnitDBNextSummon = UnitDBSummonsStart
endif
set u = null
set summonedUnit = null
return
endfunction
//Система маг резиста была изменена на дефолтную, была введена аналогичная ей система физ урона.
//Необходимо протестить эти системы на низких значениях. (могучий float и его точность). В нынешних условиях низкие значения не достигаются. На тест положен болт. Есть нерешенные проблемы с точностью(при восстановлении, опять же, резисты съезжают). Необходимо учитывать при вычислениях лишь первые три цифры после запятой, например.
#define UnitDBIncreaseUnitMagicResistance( amount, userData ) = {
set UnitDBMagicResistance[userData] = UnitDBMagicResistance[userData] * amount
}
#define UnitDBDecreaseUnitMagicResistance( amount, userData ) = {
set UnitDBMagicResistance[userData] = UnitDBMagicResistance[userData] / amount
if ( UnitDBMagicResistance[userData] > 0.99997 and UnitDBMagicResistance[userData] < 1.00003 ) then
set UnitDBMagicResistance[userData] = 1.
endif
}
#define UnitDBIncreaseUnitPhysResistance( amount, userData ) = {
set UnitDBPhysResistance[userData] = UnitDBPhysResistance[userData] * amount
}
#define UnitDBDecreaseUnitPhysResistance( amount, userData ) = {
set UnitDBPhysResistance[userData] = UnitDBPhysResistance[userData] / amount
if ( UnitDBPhysResistance[userData] > 0.99997 and UnitDBPhysResistance[userData] < 1.00003 ) then
set UnitDBPhysResistance[userData] = 1.
endif
}
#define UnitDBReplaceUnitMagicResistance( before, after, userData ) = {
set UnitDBMagicResistance[userData] = UnitDBMagicResistance[userData] / before * after
}
#define UnitDBReplaceUnitPhysResistance( before, after, userData ) = {
set UnitDBPhysResistance[userData] = UnitDBPhysResistance[userData] / before * after
}
#define UnitDBIncreaseUnitMagicDamageAmplifier( amount, userData ) = {
set UnitDBMagicDamageAmplifier[userData] = UnitDBMagicDamageAmplifier[userData] + amount
}
#define UnitDBDecreaseUnitMagicDamageAmplifier( amount, userData ) = {
set UnitDBMagicDamageAmplifier[userData] = UnitDBMagicDamageAmplifier[userData] - amount
if ( UnitDBMagicDamageAmplifier[userData] > 0.99997 and UnitDBMagicDamageAmplifier[userData] < 1.00003 ) then
set UnitDBMagicDamageAmplifier[userData] = 1.
endif
}
#define UnitDBIncreaseUnitPhysDamageAmplifier( amount, userData ) = {
set UnitDBPhysDamageAmplifier[userData] = UnitDBPhysDamageAmplifier[userData] + amount
}
#define UnitDBDecreaseUnitPhysDamageAmplifier( amount, userData ) = {
set UnitDBPhysDamageAmplifier[userData] = UnitDBPhysDamageAmplifier[userData] - amount
if ( UnitDBPhysDamageAmplifier[userData] > 0.99997 and UnitDBPhysDamageAmplifier[userData] < 1.00003 ) then
set UnitDBPhysDamageAmplifier[userData] = 1.
endif
}
#define UnitDBIncreaseUnitShield( amount, userData ) = {
set UnitDBAdditionalHealth[userData] = UnitDBAdditionalHealth[userData] + amount
//redraw
}
#define UnitDBDecreaseUnitShield( amount, userData ) = {
set UnitDBAdditionalHealth[userData] = UnitDBAdditionalHealth[userData] - amount
if ( UnitDBAdditionalHealth[userData] < 0. ) then//Perhaps should be typed manually on every use. No need of that atm.
set UnitDBAdditionalHealth[userData] = 0.
endif
//redraw
}
function UnitDBAddUnitsCreatedOnInit takes nothing returns nothing
local unit u = GetEnumUnit()
if ( not IsUnitType( u, UNIT_TYPE_HERO ) ) then
call UnitDBAddUnit( u, 1., 0. )//!!! whatever
endif
set u = null
return
endfunction
endlibrary
Смотри карту: xgm.guru/files/100/219921/comments/408338/0.w3x
Там для героев созданы их копии с другой моделью и нестандартные способности на основе способности Тёмный, которая заменяет юнита на указанного другого. Такой вариант не меняет имя героя, порядок предметов в инвентаре, кулдаун на предметах и способностях, но что-то упоминали ранее о возможных глюках с наложенными заклинаниями. Триггерно при использовании способности не на иллюзии героя добавляем ему нестандартную способность нужного типа.
Вариант с заменой юнита, примерно как ты описал, приведёт к сбросу имени, опыта, способностей, кулдаунов, предметов и заклинаний.
Вариантом морфа героя через руны не умею пользоваться.
Вариант с заменой текстуры персонажа через способность Вырвать дерево требует замены текстур деревьев в карте, а это плохо, так как героев много. Ещё это подразумевает умение работать с 3D-редакторами, которого, как предполагаю, у тебя нет.
Эсть два решения.
Первое - витаскивать музику из архивов игры. установленной на комп'ютер.
Второе - поискать в интернете, послушать звуки можно на ru.wowhead.com.
Модель имеет несколько наборов анимаций (тк предусмотрен апгрейд)
Если использовать модель башни как боевую единицу
В РО в графе Графика- Нужная анимация не должно быть записи upgrade second (Эта запись означает что будет использоваться анимация башни с орудием - второй апгрейд) Если ты апгрейдишь в игре свою башню естественно ее анимация меняется.
Как декорация модель будет использовать в игре стандартную анимацию без модификаторов таких как upgrade first /second
В редакторе башня переодически показывает разные анимации.
Решение
Сделать модель на базе башни удалив лишние анимации и импортировать или сделать башню юнитом
Понизить уровень улучшения никак нельзя. Многие пробовали самые извращенные способы, но нет.
Покопался на форуме, нашел темы, где обсуждались похожие проблемы (правда пути решения там разные):
Решения не было найдено! Самый верный способ сделать свою систему улучшений для юнитов, разбивая их на группы по признаку кол-ва грани у кости и кол-во костей, и в зависимости от этого повышать урон
Я думаю используя руну. Делать предмет в виде руны, отлавливать её использование и проверять предметы в инвентаре. Если есть нужные, то скрещивать, если нет, то создавать новую руну на земле такого же типа.
отменять постройку юнита если технология уже ап
либо как сразу говорили через ап здания
где каждому твоему зданию будет соответствовать такое же здание но с дополнительным слотом
с продажей юнита открываешь доту и смотришь как там сделан спелл передать предметы у куры
он сделан как раз через продажу юнита
иначе никак
если не нравится пожалуйся богу об этом
или близардам
пусть выпустят новый патч специально для тебя
Можешь отслеживать воздействие пассивного обнаружения через заклинание. Пусть твой "анти-шпион" накладывает какое-то заклинание-пустышку (типа "Обнаружен!"). В тригерах можно выставить что-то типа: Событие - периодическое событие (1 или 0.5 сек), Условие - сравнение логического\боевая единица - юнит имеет способность "Обнаружен!" равно нет, Действие (if, then, else, функция) боева единица - добавить способность юнита "Неуязвимый", Иначе - боева единица - удалить способность юнита "Неуязвимый".
>> IssueInstantTargetOrder: The only use of this function is to make units give items from their inventory to other units. The order in this case would be smart, the target widget is the item and the instant target widget is the target unit. The ordered unit will then move towards the target unit and hand the item over.
>>These natives have terribly confusing names, but I've heard that they are for manipulating items. I.e. Give this item (one widget argument) to this unit (another widget argument) or drop it at this point. I don't know which argument is the item and which is the target unit though.
гугл помог, а память подвела, покупка через Neutral* приказы делается
Имена бж функций есть в..blizzard.j, чтобы они не конфликтовали с вашими способностями - чекайте софтом код абилок и близард ж файл, на предмет одинаковых имен и правьте, а так еще советую тулы векса или хеави лок - они сжимают имена и небудет проблем с именами функций и переменных в скрипте.
Так ты же выключаешь триггер на 18 секунд вот он и не срабатывает.
Поставь условие, что герыч не имеет абилки-пустышки, если не имеет - дать её и через 18 сек забрать и пустить молнию.
Правда я не уверен насчёт того, отловится ли attacking unit через 18 сек вейта, проверь...
Вообще, если устраивает орбом - то даёшь "сферу молний" с эффектом "цепь молний", у которой 18 сек перезарядка(у цепи не у сферы)
Artyom18, к сожалению, такой функции почему-то нет в GUI. Нужно циклом для числа А от 1 до (макс. кол-во предметов в инвентаре). Внутри цикла условие (Если тип предмета в ячейке А равен (искомый тип), то число = число +1).
Nyanta, для начала дебаг сделать как написано в статье
Сделал. Триггер работает как нужно. При входе всегда пишет "Вход!", при выходе - "Выход!". Порядок текста не меняется.
В общем, проблема, почему-то, была в названии анимации. Открыл модель через MdlVis и назвал анимации "родными" словами Stand, Walk, Death. Стало работать как надо.
Спасибо Rare за Rare:
ставь скорость анимации на 0%
И nvc123 за то, что натолкнул на мысль этим) nvc123:
что за костыли блин
событие - приводит способность в действие
условие - применённая способность == божественный щит
действия:
unit u=GetTriggerUnit()
SetUnitVertexColor(u,0,0,0,255)
TriggerSleepAction(15) // здесь указываем время действия способности
SetUnitVertexColor(u,255,255,255,255)
если время действия зависит от уровня то юзай арифметику как писали выше
в твоём случае это 2 + (уровень способности * 2)
Скорее из-за Windows, у меня тоже 1.26. Попробуй в Свойствах на вкладке Совместимость поставить Windows 7 и выполнение с правами администратора. Только эта кампания вылетает, другие кампании и карты всегда стабильно работают?
стремиться создавать объекты не на карте, а в триггерах, сохраняя ссылки на нужные из них;
там, где в гуи открываются окна со списком из РО, использовать джасс и вводить равкод, а там, где список расставленных на карте юнитов, использовать переменные;
в РО с полями, где указаны объекты, работать через Shift+Enter и вводить равкод, чтобы не открывать список.
Оказывается причина была намного сложнее)))
Тот самый триггер-комментарий был обычным триггером (т.е хранил всю информацию о действиях и т.д), но отображался как комментарий
Поэтому помогло только его удаление
Какой точный вопрос, однако.
Ответ: триггерно, либо в редакторе объектов, если нужно изменить характеристики, не создаваемые/изменяемые триггерно.
Попытаюсь сыграть в экстрасенса, подстрахуюсь логикой:
Если нужно, чтобы изменялась характеристика количественно, т.е, например, увеличивался наносимый урон, то в действии нанесения урона вместо точного значения нужно выставить функию (формулу, зависимость etc.) имеющую аргументом уровень способности.
Если нужно менять характеристику качественно, например, тип наносимого урона, то следует использовать условия, сравнивающие уровень способности с нужным значением и... далее есть несколько вариантов реализации, но наиболее подходящий - просто выполнять все последующие действия триггера внутри оператора, а затем создать несколько раз скопировать его для других условий. Хотя, с точки зрения программирования, это не очень хороший вариант.
Вроде бы можно такое в последних патчах сделать, а в 1.26 и ниже нет. Но если тебе нужен не общий триггер для любых юнитов, которые у тебя есть и будут, а для конкретного героя, то можно просто считать. Например, у паладина учитываешь разницу в атаке, прибавляешь к ней силу, включая бонусы предметов, прибавляешь атаку от предметов, прибавляешь атаку от баффов, если они на нём есть, вычитаешь атаку от дебаффов, если есть, в итоге получишь его значение атаки. Аналогично с бронёй.
Это жесть, что ты сделал) Этот русификатор триггеров уж такую муть содержит, что ты просто какую-то белиберду сотворил. Исправил до рабочего вида, но чтобы совсем красиво было, это не ко мне, а к джассерам. Просто времени мало на всё, а исправление этих триггеров затратило его довольно много.
Вот условие на проверку баффа. Но тут может быть проблема, если у тебя есть станящие способности, которые используют не этот бафф.
Но мой способ, предложенный выше, также должен работать, причём независимо от того, какой станящий бафф наложен.
Pro100Gaus, Особо не защитишь, ну только если от идиотов. Суть защиты? Есть что то что не хочется показывать другим? Остачертели читоры? Решил торговать пикселями по образу и подобию велв?
Суть карты в розвитии, нехочу чтобы какой-то умникум(Уе**н) писал себе голд/ламбер, пытался таже запрещать команды -gold,-lumber, но они просто меняют команды на ресы. ssbbssc:
vexorian map optimiser
Я запротектил и спокойно открыл MPQ masterom/editorom + .j файл
Нашёл у Джокера спазлер, уже плюс. Берите кому надо jokerclub.at.ua/forum/4-443-1
Но всёже помогите найти более мощное.
Это баг варика. Когда ты используешь несколько диалогов и показываешь их подряд, название Title надо каждый раз заново создавать. Если бы у тебя был один диалог и ты бы его показывал несколько раз подряд - заголовок сохраниться.
Могу посоветовать при пересоздании запускать триггер dialog повторно.
Тип передвижения на Нет ставишь?
Хотя, если здание, значит прямоугольная карта путей по игровой сетке, а не любое местоположение. Тип передвижения в этом случае не важен.
Я думаю кроме нас тут уже больше никто не напишет поэтому я закрою вопрос, спасибо за внимание и ответы.
Сначала попробуй перенести все триги в другую карту, если в другой мапе все работает - проблема не в тригах, если всеже в тригах - удаляй по очереди, категориями, выясняй из-за каких не работает. Это проблема частного триггера\переменной. Чаще всего так.
ПЫСЫ не забывай бэкапить карту
Но ведь сами по себе ошибки не происходят.
Причина подобного это А) - невнимательность либо твоя либо автора В) - программное обеспечение
Что бы в дальнейшем все было окей, просто сначала потести карту полностью что бы знать что и как должно быть, а потом вноси изменения, будь внимательней.
Еще советую связаться с автором и поговорить с ним об этой проблеме, или запросить у него еще 1 исходник да бы сверЯться с ним.
Сначала попробуй перенести все триги в другую карту, если в другой мапе все работает - проблема не в тригах, если всеже в тригах - удаляй по очереди, категориями, выясняй из-за каких не работает. Это проблема частного триггера\переменной. Чаще всего так.
ПЫСЫ не забывай бэкапить карту
unsinkable78, один из вариантов это большое количество однотипных триггеров с периодом
объедении их в 1
а лучше используй таймер вместо триггеров unsinkable78, так же вероятно проблема в твоих массивах
ты судя по всему задаёшь им размер в 1000
из за чего при запуске игры твой массив заполняется ненужными значениями что забивает память и может приводить к лимиту потока (в вар3 у потока/триггера есть максимальное количество операций которые он может выполнить)
вот пример из твоего j файла
set i = 0
loop
exitwhen (i > 1000)
set udg_squad[i] = CreateGroup()
set i = i + 1
endloop
этот код циклом от 0 до 1000 создаёт группы(1000 групп соответственно) и заносит их в массив squad
это тратит более 1000 операций
и таких моментов много
так же я видел места где ты использовал массивы вместо обычных переменных что тоже увеличивает затраты ресурсов и может приводить к лимиту потока
массивы нужно использовать лишь там где без них не обойтись
Возможно что в каком то триггере не объявил глобальную переменную. Т.е. group g, когда правильно будет group g=null or group g=CreateGroup() если же real or integer то =0
Но ведь сами по себе ошибки не происходят.
Причина подобного это А) - невнимательность либо твоя либо автора В) - программное обеспечение
Что бы в дальнейшем все было окей, просто сначала потести карту полностью что бы знать что и как должно быть, а потом вноси изменения, будь внимательней.
Еще советую связаться с автором и поговорить с ним об этой проблеме, или запросить у него еще 1 исходник да бы сверЯться с ним.
Я сам разобрался с проблемой. Конечно тут две новые появились, но на них забью уже:
ИИ не нравился герой, из-за него вообще никто не нанимался.
ИИ посчитал, что улучшив главное здание, он лишается главного здания, а значит нужно его снова строить. То есть, например, улучшив ратушу до крепости, он считает, что ратуши больше нет и необходимо построить ещё одну. Потом он крепость улучшит до замка, посчитает, что разрушили крепость, улучшит до крепости ратушу№2, снова потеряет ратушу и построит уже третью.
TitanQ_287, самый хороший вариант - это хранить кампании в папке "мои документы" и её подпапках. Вся эта хрень с пропаданием кампаний происходит потому что винда не любит хранить лишние файлы в Program Files.
Все локалки должны объявляться в начале функции (у тебя local unit blizzard = GetLastCreatedUnit() вообще где-то в конце, объявляй в начале, а потом при создании юнита задавай).
Если в функции function Trig_Cast_Func005C и других подобных unit - это локалка, объявленная в другой, то так делать нельзя. Используй глобалку или перестраивай ифзенэлс.
Ну и утечек, необнулений хватает (н-р, точка кастера тоже должна задаваться в переменную и обнуляться).
» WarCraft 3 / Можно ли добавить больше способностей?
» WarCraft 3 / Настройки предмета в РО
» WarCraft 3 / Модели
» Администрация XGM / Где вопрос?
» WarCraft 3 / Как сделать, чтобы на декорации можно было становится?
» WarCraft 3 / Уровень улучшения
» WarCraft 3 / Инвентарь на +6 слотов
» WarCraft 3 / Звук
» WarCraft 3 / Пределы поля зрения
» WarCraft 3 / Обнаружения невидимых юнитов ?
» WarCraft 3 / Common.j
» WarCraft 3 / Предмет
» WarCraft 3 / Помогите настроить триггер
» WarCraft 3 / Fatal eror
» WarCraft 3 / Как создать следы крови?
» WarCraft 3 / Название триггера (не могу найти)
» Администрация XGM / Исчез проект??
» WarCraft 3 / Редактор карт, триггеры
» WarCraft 3 / Триггерная способность
» Администрация XGM / Рейтинг на сайте
» WarCraft 3 / Заголовок
» WarCraft 3 / Перестает работать триггер
» WarCraft 3 / Кампания для 2-их???
» WarCraft 3 / getbooleanand
» WarCraft 3 / Как извлечь?